# PhotoResizer

홈페이지, 쇼핑몰, 블로그 등에 사용할 이미지를 자동으로 WebP로 변환하고 용량을 최적화하는 프로그램입니다.

원본 파일은 절대 수정하지 않으며, 입력 폴더와 동일한 위치에 새로운 출력 폴더를 생성하여 결과를 저장합니다.

---

## 주요 기능

- JPG / JPEG / PNG / WEBP 입력 지원
- 모든 이미지를 WebP로 변환
- 입력 폴더 지정 가능
- 하위 폴더 자동 검색
- 비율 유지 리사이즈
- 홈페이지 업로드용 용량 최적화
- PNG 투명 배경 유지
- EXIF 정보 제거
- 오류 파일 자동 건너뛰기
- 실행 로그 저장
- Windows EXE 지원
- **화질 선택 메뉴 (1-6번 프리셋, 사용자 직접 입력)**
- **선택한 화질에 따라 출력 폴더명/파일명 자동 변경**

---

## 지원 형식

입력 가능
- JPG
- JPEG
- PNG
- WEBP

출력 형식
- WebP (항상 .webp 확장자로 저장)

---

## 동작 방식

### 입력

기본 입력 폴더는 `source`입니다.
config.json에서 원하는 입력 폴더를 지정할 수 있습니다.
하위 폴더까지 자동 검색합니다.

### 출력

출력 폴더는 입력 폴더와 같은 위치에 자동 생성됩니다.

예)
```
D:\사진\liv
↓
D:\사진\liv_webp_q90
```

### 화질 선택

프로그램 실행 시 출력 화질을 선택할 수 있습니다.

1. 최고 화질 95
2. 고화질 90
3. 권장 화질 85
4. 균형 화질 80
5. 저용량 70
6. 사용자 직접 입력

선택한 화질에 따라 출력 폴더명과 파일명이 자동으로 변경됩니다.

```
q85 선택 시:
출력 폴더: source_webp_q85
출력 파일: a_webp_q85.webp
```

config.json의 기본값은 유지되며, 실행 시 선택값이 우선 적용됩니다.
잘못된 입력 시 기본값(90)이 자동 적용됩니다.

### 출력 파일명

모든 파일은 WebP로 변환되어 저장됩니다.

예)
```
a.jpg
↓
a_webp_q90.webp
```

### 폴더 구조

원본
```
liv
├── a.jpg
├── b.png
└── sub
    └── c.jpg
```

결과
```
liv_webp_q90
├── a_webp_q90.webp
├── b_webp_q90.webp
└── sub
    └── c_webp_q90.webp
```

---

## 프로젝트 구조

```
PhotoResizer/
├── source/
├── output/
├── backup/
├── logs/
├── src/
│   ├── main.py
│   ├── config.py
│   ├── image_scanner.py
│   ├── image_processor.py
│   ├── image_saver.py
│   └── logger.py
├── config.json
├── README.md
├── REQUIREMENTS.md
├── TECHNICAL_DECISIONS.md
├── UI_FLOW.md
├── ARCHITECTURE.md
├── IMPLEMENTATION_PLAN.md
├── DESIGN_FREEZE.md
├── DOCUMENT_VALIDATION_RULES.md
├── TODO.md
├── STATE.json
├── CHANGELOG.md
├── RULES.md
├── run.bat
└── build_exe.bat
```

---

## 실행 방법

### 개발 환경

```bat
run.bat
```

또는
```bat
python src/main.py
```

### 배포 환경

```
PhotoResizer.exe
```

---

## 설정

모든 설정은 `config.json`에서 변경할 수 있습니다.

| 항목 | 기본값 | 설명 |
|------|--------|------|
| input_folder | "source" | 입력 폴더 경로 |
| output_format | "webp" | 출력 형식 (항상 webp) |
| output_quality | 90 | WebP 화질 (1-100) |
| max_size | 1920 | 최대 이미지 크기 (픽셀) |
| test_mode | false | 테스트 모드 활성화 |
| test_count | 10 | 테스트 모드 처리 개수 |
| remove_exif | true | EXIF 정보 제거 여부 |

---

## 로그

실행 결과는 `logs/` 폴더에 저장됩니다.

기록 내용
- 실행 시간
- 입력 폴더
- 출력 폴더
- 화질
- 처리 파일 수
- 성공 개수
- 실패 개수
- 오류 목록

---

## 주의사항

- 원본 이미지는 절대 수정하지 않습니다.
- 결과는 새로운 출력 폴더에 저장됩니다.
- 모든 출력은 WebP 형식입니다.
- 오류가 발생한 파일은 건너뛰고 계속 진행합니다.
- PNG 투명 배경은 가능한 경우 유지됩니다.
- 대량 이미지 처리에 적합하도록 설계되었습니다.

---

## 버전

| 항목 | 내용 |
|------|------|
| 프로젝트 | PhotoResizer |
| 버전 | 2.0.0 (Official Release) |
| 상태 | 정식 배포 완료. 이후 개발은 v2.1.0-dev에서 진행 |